package com.cskaoyan.javase.homework.day06;

/**
 * 编写一个类模拟银行账户（Account）的功能，包含的属性有"账户名（ID）"、"密码"、"账户余额"、"储蓄年利率"等。
 * 其中：
 *
 * 1.账号名：要求每个账户的账户名都是唯一的，且按照固定格式自动生成：
 *    ·第一位账户的账户名是"10001"
 *    ·其后账户的账户名依次加1。比如第二位账户的账户名就是"10002"，第三位就是"10003".....
 * 2.密码：新建账户时，可以选择自定义密码，也可以选择使用默认密码："000000"（6个0）
 * 3.账户余额：可以选择在新建账户时预设一个值，也可以保持默认值0
 * 4.储蓄年利率：由银行设置，和账户本身没有关系。
 *
 * 定义完属性后，再给出两个成员方法：
 * 1. 打印账户自身所有属性。
 * 2. 根据传入的年限和储蓄年利率，计算本息合计金额。
 *
 * @since 17:27
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class StaticBasicDemo {
    public static void main(String[] args) {
        // 测试自动生成账户ID
        Account a1 = new Account("123456", 1000);
        a1.printAccount();
        Account a2 = new Account("366788", 2000);
        a2.printAccount();
        Account a3 = new Account("345998", 3000);
        a3.printAccount();

        // 计算本息余额
        System.out.println(a1.getBalanceAfterYear(3));

    }
}

class Account {
    /*
        账户ID
        账户密码
        账户余额
        很显然是每个账户都有的属性，它们应该是成员变量
     */
    int id;
    // 密码比较独特,具有初始值
    String pwd = "000000";
    // 余额
    double balance;

    /*
        储蓄年利率显然不是某个账户的属性,它应该用static修饰
        这里将它设置成0.3%
      */
    static double annualSavingsRate = 0.003;

    /*
        账户ID的初始值是固定的
        然后每创建一个对象就+1
        于是需要一个不受创建对象影响的变量存放值，即静态成员变量。
     */
    static int initAccountId = 10001;

    /*
        无参构造器表示创建账户
        仅给出自动生成的ID
        密码默认6个0
        余额为0
     */
    public Account() {
        // 利用自增++的特性
        id = initAccountId++;
    }

    /*
        有参构造器表示创建账户
        给出自动生成的ID
        密码也自己给出
        余额也自己给出
     */
    public Account(String pwd, double balance) {
        id = initAccountId++;
        this.pwd = pwd;
        this.balance = balance;
    }

    // 打印账户信息
    public void printAccount() {
        System.out.println("账户名为" + id + "的账户,密码是" + pwd + ",余额是:" + balance);
    }

    // 计算本息合计后的余额
    public double getBalanceAfterYear(int year) {
        // 计算利息
        double interest = balance * annualSavingsRate * year;
        // 返回余额
        return interest + balance;
    }
}